


<!doctype html>
<html lang="zh" class="no-js">
  <head>
    
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1">
      
      
      
      <link rel="shortcut icon" href="../../images/logo.ico">
      <meta name="generator" content="mkdocs-1.1.2, mkdocs-material-5.5.3">
    
    
      
        <title>merge 模块 - spipy 使用教程</title>
      
    
    
      <link rel="stylesheet" href="../../assets/stylesheets/main.947af8d5.min.css">
      
        <link rel="stylesheet" href="../../assets/stylesheets/palette.7f672a1f.min.css">
      
      
        
        
        <meta name="theme-color" content="#009688">
      
    
    
    
      
        <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7C&display=fallback">
        <style>body,input{font-family:"Roboto",-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"",SFMono-Regular,Consolas,Menlo,monospace}</style>
      
    
    
    
    
      
    
    
  </head>
  
  
    
    
    
    <body dir="ltr" data-md-color-scheme="" data-md-color-primary="teal" data-md-color-accent="teal">
  
    
    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
    <label class="md-overlay" for="__drawer"></label>
    <div data-md-component="skip">
      
        
        <a href="#mergetools" class="md-skip">
          跳转至
        </a>
      
    </div>
    <div data-md-component="announce">
      
    </div>
    
      <header class="md-header" data-md-component="header">
  <nav class="md-header-nav md-grid" aria-label="Header">
    <a href="../.." title="spipy 使用教程" class="md-header-nav__button md-logo" aria-label="spipy 使用教程">
      
  <img src="../../images/logo.png" alt="logo">

    </a>
    <label class="md-header-nav__button md-icon" for="__drawer">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
    </label>
    <div class="md-header-nav__title" data-md-component="header-title">
      
        <div class="md-header-nav__ellipsis">
          <span class="md-header-nav__topic md-ellipsis">
            spipy 使用教程
          </span>
          <span class="md-header-nav__topic md-ellipsis">
            
              merge 模块
            
          </span>
        </div>
      
    </div>
    
      <label class="md-header-nav__button md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
      </label>
      
<div class="md-search" data-md-component="search" role="dialog">
  <label class="md-search__overlay" for="__search"></label>
  <div class="md-search__inner" role="search">
    <form class="md-search__form" name="search">
      <input type="text" class="md-search__input" name="query" aria-label="搜索" placeholder="搜索" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active">
      <label class="md-search__icon md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
      </label>
      <button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
      </button>
    </form>
    <div class="md-search__output">
      <div class="md-search__scrollwrap" data-md-scrollfix>
        <div class="md-search-result" data-md-component="search-result">
          <div class="md-search-result__meta">
            Initializing search
          </div>
          <ol class="md-search-result__list"></ol>
        </div>
      </div>
    </div>
  </div>
</div>
    
    
  </nav>
</header>
    
    <div class="md-container" data-md-component="container">
      
        
      
      
        
      
      <main class="md-main" data-md-component="main">
        <div class="md-main__inner md-grid">
          
            
              <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  <label class="md-nav__title" for="__drawer">
    <a href="../.." title="spipy 使用教程" class="md-nav__button md-logo" aria-label="spipy 使用教程">
      
  <img src="../../images/logo.png" alt="logo">

    </a>
    spipy 使用教程
  </label>
  
  <ul class="md-nav__list" data-md-scrollfix>
    
      
      
      


  <li class="md-nav__item">
    <a href="../.." title="简介" class="md-nav__link">
      简介
    </a>
  </li>

    
      
      
      


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2">
    
    <label class="md-nav__link" for="nav-2">
      快速上手
      <span class="md-nav__icon md-icon">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.42z"/></svg>
      </span>
    </label>
    <nav class="md-nav" aria-label="快速上手" data-md-level="1">
      <label class="md-nav__title" for="nav-2">
        <span class="md-nav__icon md-icon">
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
        </span>
        快速上手
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../Getting-Started/installation/" title="安装" class="md-nav__link">
      安装
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../Getting-Started/framework/" title="模块架构" class="md-nav__link">
      模块架构
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../Getting-Started/best-practice/" title="使用例子" class="md-nav__link">
      使用例子
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

    
      
      
      


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
    
    <label class="md-nav__link" for="nav-3">
      命令行工具
      <span class="md-nav__icon md-icon">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.42z"/></svg>
      </span>
    </label>
    <nav class="md-nav" aria-label="命令行工具" data-md-level="1">
      <label class="md-nav__title" for="nav-3">
        <span class="md-nav__icon md-icon">
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
        </span>
        命令行工具
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../Scripts/Introduction/" title="简介" class="md-nav__link">
      简介
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../Scripts/Integrated-UI/" title="集成可视化工具" class="md-nav__link">
      集成可视化工具
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

    
      
      
      

  


  <li class="md-nav__item md-nav__item--active md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4" checked>
    
    <label class="md-nav__link" for="nav-4">
      API文档
      <span class="md-nav__icon md-icon">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.42z"/></svg>
      </span>
    </label>
    <nav class="md-nav" aria-label="API文档" data-md-level="1">
      <label class="md-nav__title" for="nav-4">
        <span class="md-nav__icon md-icon">
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
        </span>
        API文档
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../analyse/" title="analyse模块" class="md-nav__link">
      analyse模块
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../image/" title="image模块" class="md-nav__link">
      image模块
    </a>
  </li>

        
          
          
          

  


  <li class="md-nav__item md-nav__item--active">
    
    <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
    
    
      <label class="md-nav__link md-nav__link--active" for="__toc">
        merge模块
        <span class="md-nav__icon md-icon">
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 9h14V7H3v2m0 4h14v-2H3v2m0 4h14v-2H3v2m16 0h2v-2h-2v2m0-10v2h2V7h-2m0 6h2v-2h-2v2z"/></svg>
        </span>
      </label>
    
    <a href="./" title="merge模块" class="md-nav__link md-nav__link--active">
      merge模块
    </a>
    
      
<nav class="md-nav md-nav--secondary" aria-label="目录">
  
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
      </span>
      目录
    </label>
    <ul class="md-nav__list" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#mergetools" class="md-nav__link">
    merge.tools
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#mergeemc" class="md-nav__link">
    merge.emc
  </a>
  
</li>
      
    </ul>
  
</nav>
    
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../phase/" title="phase模块" class="md-nav__link">
      phase模块
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../simulate/" title="simulate模块" class="md-nav__link">
      simulate模块
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

    
      
      
      


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
    
    <label class="md-nav__link" for="nav-5">
      图形界面
      <span class="md-nav__icon md-icon">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.42z"/></svg>
      </span>
    </label>
    <nav class="md-nav" aria-label="图形界面" data-md-level="1">
      <label class="md-nav__title" for="nav-5">
        <span class="md-nav__icon md-icon">
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
        </span>
        图形界面
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../Graphics-UI/installation/" title="安装" class="md-nav__link">
      安装
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../Graphics-UI/preview/" title="预览" class="md-nav__link">
      预览
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

    
  </ul>
</nav>
                  </div>
                </div>
              </div>
            
            
              <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    
<nav class="md-nav md-nav--secondary" aria-label="目录">
  
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
      </span>
      目录
    </label>
    <ul class="md-nav__list" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#mergetools" class="md-nav__link">
    merge.tools
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#mergeemc" class="md-nav__link">
    merge.emc
  </a>
  
</li>
      
    </ul>
  
</nav>
                  </div>
                </div>
              </div>
            
          
          <div class="md-content">
            <article class="md-content__inner md-typeset">
              
                
                
                  
                
                
                  <h1>merge模块</h1>
                
                <h3 id="mergetools">merge.tools</h3>
<ul>
<li>
<p><strong>get_slice</strong> (model, rotations, det_size, det_center=None, mask=None, slice_coor_ori=None, euler_order="zxz")</p>
<ul>
<li><code>model</code> : diffraction volume, numpy array, shape=(Nx,Ny,Nz)</li>
<li><code>rotations</code> : list, mixed with quaterions or euler angles, for example [[w, qx, qy, qz], [alpha, beta, gamma], ...], length = Nq</li>
<li><code>det_size</code> : detector size, [size_x, size_y], in pixels</li>
<li><code>det_center</code> : detector center, [Cx, Cy] or None, in pixels</li>
<li><code>mask</code> : 0/1 two-value numpy array, same shape with data, 1 means masked pixel</li>
<li><code>slice_coor_ori</code> : pre-mapped coordinates in k-space of detector pixels without rotation, shape=(3,N), N=det_size[0]*det_size[1], optional</li>
<li><code>euler_order</code> : rotation order if you are using euler angles, str, 'zxz' or 'xyz', etc</li>
</ul>
<p>[<strong>return</strong>] generate slices from a 3D model according to given orientations, return slices, numpy array, shape=(Nq,size_x,size_y)</p>
</li>
<li>
<p><strong>merge_slice</strong> (model, rotations, slices, weights=None, det_center=None, mask=None, slice_coor_ori=None, euler_order="zxz")</p>
<ul>
<li><code>model</code> : diffraction volume to be merged, numpy array, shape=(Nx,Ny,Nz)</li>
<li><code>rotations</code> : list, mixed with quaterions or euler angles, for example [[w, qx, qy, qz], [alpha, beta, gamma], ...], length = Nq</li>
<li><code>slices</code> : numpy array, some patterns, shape=(size_x,size_y)</li>
<li><code>weights</code> : initial interpolation weights of all voxels in the model, same shape with model, optional</li>
<li><code>det_center</code> : detector center, [Cx, Cy] or None, in pixels</li>
<li><code>mask</code> : 0/1 two-value numpy array, same shape with data, 1 means masked pixel</li>
<li><code>slice_coor_ori</code> : pre-mapped coordinates in k-space of detector pixels without rotation, shape=(3,N), N=det_size[0]*det_size[1], optional</li>
<li><code>euler_order</code> : rotation order if you are using euler angles, str, 'zxz' or 'xyz', etc</li>
</ul>
<p>[<strong>return</strong>] merge sereval slices into a 3D model according to given orientations, input 'model' is modified directly, no return</p>
</li>
<li>
<p><strong>poisson_likelihood</strong> (W_j, K_k, beta=1, weight=None)</p>
<ul>
<li><code>W_j</code> : model slice in orientation j, 2d pattern or flattened array, do masking in advance (set masked area to 0 or just give flattened array without masked points)</li>
<li><code>K_k</code> : kth experiment pattern, 2d pattern or flattened array, do masking in advance</li>
<li><code>beta</code> : float, suggested values are from 1 to 50</li>
<li><code>weight</code> : float, the weight of orientation j, given when orientations are not uniformly sampled</li>
</ul>
<p>[<strong>return</strong>] poisson likelihood between a model slice and an experiment pattern, return R_jk = weight * ( Product{ W_j<sup>K_k</sup>exp(-W_j) } )<sup>beta</sup>, a float</p>
</li>
<li>
<p><strong>maximization</strong> (K_ks, Prob_ks)</p>
<ul>
<li><code>K_ks</code> : ALL useful experiment patterns, numpy array, shape=(N,Np), where N is the number of patterns and Np is the number of useful pixels per pattern. Reshape pattern to array and do masking in advance !</li>
<li><code>Prob_ks</code> : probabilities of ALL useful patterns (after normalizing in every orientation) in orientation j, shape=(N,)</li>
</ul>
<p>[<strong>return</strong>] updated slice of orientation j after likelihood maximization, numpy array, shape=(Np,)</p>
</li>
<li>
<p><strong>get_quaternion</strong> (Num_level)</p>
<ul>
<li><code>Num_level</code> : int, controls the number of output quaternions ( 2*Num_level<sup>3</sup> )</li>
</ul>
<p>[<strong>return</strong>] quaternions which are uniformly distributed in orientation space, return quaternions array, shape=(2*Num_level<sup>3</sup>,4)</p>
</li>
</ul>
<hr />
<h3 id="mergeemc">merge.emc</h3>
<pre><code class="ini"># EMC basic parameters
- 'parameters|detd'         : distance between sample and detector [unit : mm]

- 'parameters|lambda'       : wave length of laser [unit : angstrom]

- 'parameters|detsize'      : detector size (Sx,Sy) [unit : pixel]

- 'parameters|pixsize'      : pixel size of detector [unit : mm]

- 'parameters|stoprad'      : radius of a circle region at the center of pattern that will not be used in orientation recovery, but will be merged to final scattering volume [unit : pixel]. This option only works when 'make_detector|in_mask_file'=None

- 'parameters|polarization' : correction due to incident beam polarization, value from 'x', 'y' or 'none'

- 'emc|num_div'             : level that used to generate quaternions, also known as n, where Mrot=10(n+5n^3)

- 'emc|need_scaling'        : whether need to scale patterns' intensities

- 'emc|beta'                : beta value of emc method, usually 0.001~0.01 is fine for diffraction patterns, smaller beta value means slower convergence speed, but higher accuracy for high SNR dataset

- 'emc|beta_schedule'       : for example, if 'emc|beta_schedule' = '1.414 10', that means for every 10 iterations, beta = beta * 1.414

# EMC advanced parameters
- 'parameters|ewald_rad'    : Radius of curvature of the Ewald sphere (unit=voxels), used to control oversampling rate in reciprocal space. For default, oversampling rate is set as the same with experimental patterns, where 'ewald_rad'='detd'/'pixelsize'. Larger ewald_rad means smaller oversampling rate and reciprocal scattering matrix.

- 'make_detector|in_mask_file' : path of mask file (a numpy/binary file, .npy, .byt, .bin) that operate on input patterns. Usually, most experiments need mask file. In your mask file, 0 marks unmasked area, 1 marks areas that will not be used for orientation recovery but will used in merging, 2 marks areas that will not be used for both orientation recovery and merging. For binary file the dtype should be 'uint8', for numpy file it can be any type. Default is None.

- 'make_detector|center'    : the center of detector, for example '128 128'. As default, the geometry center is used.

- 'emc|sym_icosahedral'     : bool (0/1), whether to force icosahedral symmetry in orientation recovery.

- 'emc|selection'           : 'even_only', 'odd_only' and 'None', where 'even' / 'odd' means only patterns whose index is even / odd will be used. 'None' means all patterns will be used.

- 'emc|start_model_file'    : path of data file that store initial model which will be used at the start of emc program. The format should be '.bin' binary file for C 'fopen' to read.
</code></pre>

<ul>
<li>
<p><strong>new_project</strong> (data_path, inh5, path=None, name=None)</p>
<ul>
<li><code>data_path</code> : string, path of your dataset file, MUST be HDF5 file, and the data type must be 'int32' or 'int64'</li>
<li><code>inh5</code> : string, where pattern locates inside h5 file, patterns should be stored in a numpy.ndarray, shape=(Nd,Nx,Ny)</li>
<li><code>path</code> : string, create work directory under this path, set None to use current dir</li>
<li><code>name</code> : string, give a name to your project, set None to let program choose one for you</li>
</ul>
<p>[<strong>return</strong>] create a new project, no return</p>
</li>
<li>
<p><strong>config</strong> (params)</p>
<ul>
<li><code>params</code> : dict, parameters to configure</li>
</ul>
<p>[<strong>return</strong>] doing configuration, no return</p>
</li>
<li>
<p><strong>run</strong> (num_proc, num_thread, iters, nohup=False, resume=False, cluster=True)</p>
<ul>
<li><code>num_proc</code> : int, number of processes</li>
<li><code>num_thread</code> : int, how many threads in each process</li>
<li><code>iters</code> : int, how many reconstruction iterations</li>
<li><code>nohup</code> : bool, whether run in the background</li>
<li><code>resume</code> : bool, whether run from previous break point</li>
<li><code>cluster</code> : bool, whether you will submit jobs using job scheduling system, if True, the function will only generate a command file at your work path without submitting it, and ignore nohup value; if False, the program will run directly</li>
</ul>
<p>[<strong>return</strong>] start emc, return command string if 'cluster' is True</p>
<p>[<strong>notice</strong>] As this program costs a lot of memories, use as less processes and much threads as possible. Recommended strategy : num_proc * num_thread ~ number of cores in all of your CPUs. Let one cluster node support 1~2 processes.</p>
</li>
<li>
<p><strong>use_project</strong> (project_path)</p>
<ul>
<li><code>project_path</code> : string, the path of project directory that you want to switch to</li>
</ul>
<p>[<strong>return</strong>] switch to a existing project, no return</p>
</li>
</ul>
                
                  
                
              
              
                


              
            </article>
          </div>
        </div>
      </main>
      
        
<footer class="md-footer">
  
    <div class="md-footer-nav">
      <nav class="md-footer-nav__inner md-grid" aria-label="Footer">
        
          <a href="../image/" title="image模块" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev">
            <div class="md-footer-nav__button md-icon">
              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
            </div>
            <div class="md-footer-nav__title">
              <div class="md-ellipsis">
                <span class="md-footer-nav__direction">
                  上一页
                </span>
                image模块
              </div>
            </div>
          </a>
        
        
          <a href="../phase/" title="phase模块" class="md-footer-nav__link md-footer-nav__link--next" rel="next">
            <div class="md-footer-nav__title">
              <div class="md-ellipsis">
                <span class="md-footer-nav__direction">
                  下一页
                </span>
                phase模块
              </div>
            </div>
            <div class="md-footer-nav__button md-icon">
              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
            </div>
          </a>
        
      </nav>
    </div>
  
  <div class="md-footer-meta md-typeset">
    <div class="md-footer-meta__inner md-grid">
      <div class="md-footer-copyright">
        
        Made with
        <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
          Material for MkDocs
        </a>
      </div>
      
    </div>
  </div>
</footer>
      
    </div>
    
      <script src="../../assets/javascripts/vendor.c3dc8c49.min.js"></script>
      <script src="../../assets/javascripts/bundle.f9edbbd5.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "\u590d\u5236", "clipboard.copied": "\u5df2\u590d\u5236", "search.config.lang": "ja", "search.config.pipeline": "trimmer, stemmer", "search.config.separator": "[\\uff0c\\u3002]+", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c"}</script>
      
      <script>
        app = initialize({
          base: "../..",
          features: [],
          search: Object.assign({
            worker: "../../assets/javascripts/worker/search.8e2cddea.min.js"
          }, typeof search !== "undefined" && search)
        })
      </script>
      
    
  </body>
</html>